﻿using System;
using System.Collections.Generic;
using System.Linq;
using System.Web;
using System.Web.UI;
using System.Web.UI.WebControls;
using System.Data.SqlClient;
using System.Data;
using CrystalDecisions.CrystalReports.Engine;
using CrystalDecisions.Shared;
using System.IO;

public partial class GioiThieu : System.Web.UI.Page
{

    SqlParameter[] p;
    clsXuLy ex = new clsXuLy();
    static ReportDocument rpt;
    string frmName = "frmGioiThieu";
    static int STT = 0, f_PheDuyet = 0, f_Xuat = 0, f_SuDung = 0, f_Them = 0, f_Sua = 0, f_Xoa = 0;
    public string Header = System.Configuration.ConfigurationSettings.AppSettings["Header"].ToString();
    static string ngay = DateTime.Now.Day < 10 ? "0" + DateTime.Now.Day.ToString() : DateTime.Now.Day.ToString();
    static string thang = DateTime.Now.Month < 10 ? "0" + DateTime.Now.Month.ToString() : DateTime.Now.Month.ToString();

    static DataTable dt;
    static DataTable dtChiTiet;
    static string so = "", diachi = "", noidung = "", giatriden = "";

    protected void Page_Load(object sender, EventArgs e)
    {
        if (string.IsNullOrEmpty(Convert.ToString(Session["IDUser"])) || string.IsNullOrEmpty(Convert.ToString(Session["NhomND"])))
            gstGetMess("Hết phiên làm việc, vui lòng đăng nhập để tiếp tục", "Default.aspx");
        else
        {
            if (!IsPostBack)
            {
                Title = "Giấy giới thiệu | " + Header;
                string idnhom = Session["NhomND"].ToString();
                string sql = "select isnull([print],0), isnull(pheduyet,0), SuDung,Them,Sua,Xoa from vnttblnguoidungchucnang where idnhomnguoidung='" + idnhom + "' and tag='" + frmName + "'";

                dlNhanVien.DataSource = ex.GetData("sp_vnttblnhansu_ListDrop");
                dlNhanVien.DataBind();
                dlNhanVien.Items.Insert(0, new ListItem("--Chọn nhân viên--",""));
                DataTable dt2 = ex.GetData_Text(sql);
                if (dt2.Rows.Count > 0)
                {
                    f_Xuat = int.Parse(dt2.Rows[0][0].ToString());
                    f_PheDuyet = int.Parse(dt2.Rows[0][1].ToString());
                    f_SuDung = int.Parse(dt2.Rows[0]["SuDung"].ToString());
                    f_Them = int.Parse(dt2.Rows[0]["Them"].ToString());
                    f_Sua = int.Parse(dt2.Rows[0]["Sua"].ToString());
                    f_Xoa = int.Parse(dt2.Rows[0]["Xoa"].ToString());
                }
                if (f_SuDung.Equals(1))
                    btnCancel_Click(sender, e);
                else
                    gstGetMess("Bạn không có quyền xem trang này", "Home.aspx");
            }
        }
    }
    protected void btnSave_Click(object sender, EventArgs e)
    {
        if (f_Them.Equals(1))
        {
            if (string.IsNullOrEmpty(Convert.ToString(Session["IDUser"])))
                gstGetMess("Hết phiên làm việc, vui lòng đăng nhập để tiếp tục", "Default.aspx");
            else
            {
                DateTime giatriden = DateTime.Parse(ex.GetNgayThang(txtHSD.Text.Trim()).ToString());
                TimeSpan t = DateTime.Now - giatriden;
                
                if (t.Days > 0)
                    gstGetMess("Giá trị đến phải lớn hơn hoặc bằng ngày hôm nay", "");
                else
                {
                    try
                    {
                        p = new SqlParameter[6];
                        p[0] = new SqlParameter("@IDs", Guid.NewGuid());
                        p[0].SqlDbType = SqlDbType.UniqueIdentifier;
                        p[1] = new SqlParameter("@So", txtSo.Text.Trim());
                        p[1].SqlDbType = SqlDbType.VarChar;
                        p[2] = new SqlParameter("@NhanVien", ex.GetGuid(dlNhanVien.SelectedValue));
                        p[2].SqlDbType = SqlDbType.UniqueIdentifier;
                        p[3] = new SqlParameter("@DiaChi", txtDiaChi.Text.Trim());
                        p[3].SqlDbType = SqlDbType.NVarChar;
                        p[4] = new SqlParameter("@NoiDung", txtNoiDung.Text.Trim());
                        p[4].SqlDbType = SqlDbType.NVarChar;
                        p[5] = new SqlParameter("@GiaTriDen", txtHSD.Text.Trim());
                        p[5].SqlDbType = SqlDbType.VarChar;

                        ex.ExecuteNonQuerry("sp_vnttblgiaygioithieu_Add", p);

                        int s = ex.GetValueInt_Text("select count(*) from vnttblautonumber where upper(Name)='" + frmName.ToUpper() + "'");
                        if (s.Equals(0))
                        {
                            //Insert auto number
                            p = new SqlParameter[4];
                            p[0] = new SqlParameter("@IDs", Guid.NewGuid());
                            p[0].SqlDbType = SqlDbType.UniqueIdentifier;
                            p[1] = new SqlParameter("@Name", frmName);
                            p[1].SqlDbType = SqlDbType.VarChar;
                            p[2] = new SqlParameter("@Number", 1);
                            p[2].SqlDbType = SqlDbType.Int;
                            p[3] = new SqlParameter("@Ngay", DateTime.Now.ToString("yyMMdd"));
                            p[3].SqlDbType = SqlDbType.VarChar;
                            ex.ExecuteNonQuerry("sp_vnttblautonumber_Add", p);
                        }
                        else
                        {
                            //Update auto number
                            p = new SqlParameter[3];
                            p[0] = new SqlParameter("@Name", frmName);
                            p[0].SqlDbType = SqlDbType.VarChar;
                            p[1] = new SqlParameter("@Number", txtSo.Text.Trim().Substring(6));
                            p[1].SqlDbType = SqlDbType.Int;
                            p[2] = new SqlParameter("@Ngay", DateTime.Now.ToString("yyMMdd"));
                            p[2].SqlDbType = SqlDbType.VarChar;
                            ex.ExecuteNonQuerry("sp_vnttblautonumber_Update", p);
                        }
                        LoadDanhSach();
                        btnCancel_Click(sender, e);
                        gstGetMess("Lưu thành công", "");
                    }
                    catch (Exception ax)
                    {
                        gstGetMess("Có lỗi trong quá trình lưu, xem trong file log", "");
                        ex.WriteLog(Server.MapPath("Log.txt"), DateTime.Now.ToString() + "\tGiấy giới thiệu\t" + ax.Message);
                    }
                }
            }
        }
        else
            gstGetMess("Bạn không có quyền thêm dữ liệu trên trang này", "Home.aspx");
    }
    protected void btnCancel_Click(object sender, EventArgs e)
    {
        dlNhanVien.SelectedIndex = 0;
        txtDiaChi.Focus();
        txtSo.Text = "";
        txtDiaChi.Text = "";
        txtNoiDung.Text = "";
        txtHSD.Text = "";
        txtLyDo.Text = "";

        so = "";
        giatriden = "";
        diachi = "";
        noidung = "";

        btnDuyet.Visible = false;
        btnPDF.Visible = false;
        btnSave.Visible = true;
        btncapnhat.Visible = false;
        btnXoa.Visible = false;

        dlNhanVien.Enabled= true;
        txtDiaChi.ReadOnly = false;
        txtNoiDung.ReadOnly = false;
        txtHSD.ReadOnly = false;

        rdDat.Checked = true;
        rdKhongDat.Checked = false;

        STT = ex.GetValueInt_Text("select count(*) from vnttblautonumber where Ngay='" + DateTime.Now.ToString("yyMMdd") + "' and upper(Name)='" + frmName.ToUpper() + "'");

        if (STT.Equals(0))
            STT++;
        else
            STT = ex.GetValueInt_Text("select isnull(Number,0) from vnttblautonumber where Ngay='" + DateTime.Now.ToString("yyMMdd") + "' and upper(name)='" + frmName.ToUpper() + "'") + 1;
        if (STT < 10)
            txtSo.Text = DateTime.Now.ToString("yyMMdd") + "0" + STT.ToString();
        else txtSo.Text = DateTime.Now.ToString("yyMMdd") + STT.ToString();

        LoadDanhSach();

    }
    private void LoadDanhSach()
    {
        ck1.Checked = false;
        ck2.Checked = false;
        ck3.Checked = false;
        ck4.Checked = false;


        if (string.IsNullOrEmpty(Convert.ToString(Session["IDUser"])) || string.IsNullOrEmpty(Convert.ToString(Session["NhomND"])))
            gstGetMess("Hết phiên làm việc, vui lòng đăng nhập để tiếp tục", "Default.aspx");
        else
        {
            dt = ex.GetData("sp_vnttblgiaygioithieu_ListByAdmin");
            dt.DefaultView.RowFilter = "TrangThai='Chờ duyệt'";
            ck4.Checked = true;
            GV.DataSource = dt;
            GV.DataBind();
        }

    }
    protected void btnPDF_Click(object sender, EventArgs e)
    {
        if (hdID.Value.Trim().Equals(""))
            gstGetMess("Hết phiên làm việc, vui lòng chọn lại văn bản để xuất", "");
        else
        {
            Guid ID = new Guid(hdID.Value);
            p = new SqlParameter[1];
            p[0] = new SqlParameter("@ID", ID);
            p[0].SqlDbType = SqlDbType.UniqueIdentifier;

            dt = ex.GetData("sp_vnttblgiaygioithieu_Print",p);
            if (dt.Rows.Count > 0)
                ViewReport("[Số: " + txtSo.Text.Trim() + "/VNT-GGT]", dt.Rows[0]["HoTen"].ToString().Trim(),dt.Rows[0]["TenCV"].ToString(), dt.Rows[0]["CMND"].ToString(), dt.Rows[0]["NoiCap"].ToString(), dt.Rows[0]["NgayCap"].ToString(), diachi, noidung, giatriden);
        }
    }
    void ViewReport(string so, string hoten, string chucvu, string cmnd, string noicap, string ngaycap, string diachi, string noidung, string hsd)
    {
        string path = Server.MapPath("Report/BC.PDF");
        rpt = new ReportDocument();
        rpt.Load(Server.MapPath("Report/GiayGioiThieu.rpt"));

        rpt.SetParameterValue("@So", so);
        rpt.SetParameterValue("@HoTen", hoten);
        rpt.SetParameterValue("@ChucVu", chucvu);
        rpt.SetParameterValue("@CMND", cmnd);
        rpt.SetParameterValue("@NoiCap", noicap);
        rpt.SetParameterValue("@NgayCap", ngaycap);
        rpt.SetParameterValue("@DiaChi", diachi);
        rpt.SetParameterValue("@NoiDung", noidung);
        rpt.SetParameterValue("@HanSuDung", hsd);
        rpt.SetParameterValue("@NgayThang","Hà Nội, ngày "+DateTime.Now.Day.ToString()+" tháng "+DateTime.Now.Month.ToString()+" năm "+DateTime.Now.Year.ToString());


        rpt.ExportToDisk(ExportFormatType.PortableDocFormat, path);
        HttpResponse res = HttpContext.Current.Response;
        res.ClearContent();
        res.ContentType = "application/pdf";
        res.AddHeader("Content-Disposition", "Attachment; filename=VNT-GGT_" + DateTime.Now.ToString("ddMMyyyyhhmmss") + ".pdf" + ";");

        MemoryStream stream;
        FileStream fs = new FileStream(path, FileMode.Open, FileAccess.Read);
        byte[] img = new byte[fs.Length];
        fs.Read(img, 0, Convert.ToInt32(fs.Length));
        fs.Close();
        fs.Dispose();
        stream = new MemoryStream(img);
        stream.WriteTo(Response.OutputStream);

        FileInfo f = new FileInfo(path);
        if (f.Exists) f.Delete();
        res.End();
    }

    private void gstGetMess(string gstMess, string gstLink)
    {
        if (gstLink == "")
            ScriptManager.RegisterClientScriptBlock(this, this.GetType(), " ", "alert('" + gstMess + "')", true);
        else
            ScriptManager.RegisterClientScriptBlock(this, this.GetType(), " ", "alert('" + gstMess + "');window.location.href='" + gstLink + "'", true);

    }
    protected void btncapnhat_Click(object sender, EventArgs e)
    {
        if (f_Sua.Equals(1))
        {
            try
            {
                DateTime tungay = DateTime.Parse(ex.GetNgayThang(txtHSD.Text.Trim()).ToString());
                TimeSpan t = DateTime.Now - tungay;


                if (t.Days > 0)
                    gstGetMess("Giá trị đến phải lớn hơn hoặc bằng ngày hôm nay", "");
                else
                {
                    Guid gID = new Guid(hdID.Value);
                    p = new SqlParameter[5];
                    p[0] = new SqlParameter("@IDs", gID);
                    p[0].SqlDbType = SqlDbType.UniqueIdentifier;

                    p[1] = new SqlParameter("@NhanVien", ex.GetGuid(dlNhanVien.SelectedValue));
                    p[1].SqlDbType = SqlDbType.UniqueIdentifier;
                    p[2] = new SqlParameter("@GiaTriDen", txtHSD.Text.Trim());
                    p[2].SqlDbType = SqlDbType.VarChar;
                    p[3] = new SqlParameter("@DiaChi", txtDiaChi.Text.Trim());
                    p[3].SqlDbType = SqlDbType.NVarChar;
                    p[4] = new SqlParameter("@NoiDung", txtNoiDung.Text.Trim());
                    p[4].SqlDbType = SqlDbType.NVarChar;
                    
                    ex.ExecuteNonQuerry("sp_vnttblgiaygioithieu_Update", p);
                    btnCancel_Click(sender, e);
                    gstGetMess("Cập nhật thành công", "");
                }
            }
            catch (Exception ax)
            {
                gstGetMess("Có lỗi trong quá trình cập nhật, xem trong file log", "");
                ex.WriteLog(Server.MapPath("Log.txt"), DateTime.Now.ToString() + "\tGiấy giới thiệu\t" + ax.Message);
            }
        }
        else
            gstGetMess("Bạn không có quyền sửa dữ liệu trên trang này", "");
    }
    protected void btnXoa_Click(object sender, EventArgs e)
    {


        try
        {
            Guid gID = new Guid(hdID.Value);
            p = new SqlParameter[1];
            p[0] = new SqlParameter("@IDs", gID);
            p[0].SqlDbType = SqlDbType.UniqueIdentifier;
            ex.ExecuteNonQuerry("sp_vnttblgiaygioithieu_Del", p);
            btnCancel_Click(sender, e);
            gstGetMess("Xóa thành công", "");
        }
        catch (Exception ax)
        {
            gstGetMess("Có lỗi trong quá trình xóa, xem trong file log", "");
            ex.WriteLog(Server.MapPath("Log.txt"), DateTime.Now.ToString() + "\tGiấy giới thiệu\t" + ax.Message);

        }
    }
    
    protected void GV_RowCommand(object sender, GridViewCommandEventArgs e)
    {

        string ID = e.CommandArgument.ToString();
        hdID.Value = ID;
        Guid gID = new Guid(ID);
        p = new SqlParameter[1];
        p[0] = new SqlParameter("@IDs", gID);
        p[0].SqlDbType = SqlDbType.UniqueIdentifier;

        if (e.CommandName.Equals("Select"))
        {
            dtChiTiet = ex.GetData("sp_vnttblgiaygioithieu_ListByID", p);
            if (dtChiTiet.Rows.Count > 0)
            {
                try
                {
                    txtSo.Text = so = dtChiTiet.Rows[0]["So"].ToString();
                    dlNhanVien.SelectedValue = dtChiTiet.Rows[0]["NhanVien"].ToString();
                    txtHSD.Text = giatriden = dtChiTiet.Rows[0]["GiaTriDen"].ToString();
                    txtDiaChi.Text = diachi = dtChiTiet.Rows[0]["DiaChi"].ToString();
                    txtNoiDung.Text = noidung = dtChiTiet.Rows[0]["NoiDung"].ToString();
                    

                    string trangthai = dtChiTiet.Rows[0]["TrangThai"].ToString();

                    btnXoa.Visible = false;

                    if (f_PheDuyet == 1)
                        btnDuyet.Visible = trangthai.Equals("1");

                    if (f_Xuat == 1)
                        btnPDF.Visible = trangthai.Equals("2");

                    if (trangthai.Equals("1") || trangthai.Equals("3"))
                        btnXoa.Visible = true;
                    else btnXoa.Visible = false;

                    if (trangthai.Equals("1"))
                    {
                        btncapnhat.Visible = true;

                        dlNhanVien.Enabled = true;
                        txtDiaChi.ReadOnly = false;
                        txtNoiDung.ReadOnly = false;
                        txtHSD.ReadOnly = false;
                    }
                    else
                    {
                        btncapnhat.Visible = false;
                        dlNhanVien.Enabled = false;
                        txtDiaChi.ReadOnly = true;
                        txtNoiDung.ReadOnly = true;
                        txtHSD.ReadOnly = true;
                    }
                }
                catch (Exception ax)
                {
                    gstGetMess("Có lỗi trong quá trình xem, xem trong file log", "");
                    ex.WriteLog(Server.MapPath("Log.txt"), DateTime.Now.ToString() + "\tGiới thiệu\t" + ax.Message);
                }
            }
            btnSave.Visible = false;

        }
    }
    protected void btnLuu_Click(object sender, EventArgs e)
    {
        Guid IDs = new Guid(hdID.Value);
        p = new SqlParameter[3];
        p[0] = new SqlParameter("@IDs", IDs);
        p[0].SqlDbType = SqlDbType.UniqueIdentifier;
        p[1] = new SqlParameter("@TrangThai", rdDat.Checked ? 2 : 3);
        p[1].SqlDbType = SqlDbType.Int;
        p[2] = new SqlParameter("@KetLuan", txtLyDo.Text.Trim());
        p[2].SqlDbType = SqlDbType.NVarChar;
        ex.ExecuteNonQuerry("sp_vnttblgiaygioithieu_UpdateStatus", p);
        btnCancel_Click(sender, e);
    }
    protected void stt_CheckedChanged(object sender, EventArgs e)
    {
        string filtter = "";
        if (ck1.Checked)
        {
            filtter = "";
        }
        else
            if (ck2.Checked)
            {
                filtter = "TrangThai='Đã duyệt'";
            }
            else
                if (ck3.Checked)
                {
                    filtter = "TrangThai='Không duyệt'";
                }
                else
                    if (ck4.Checked)
                    {
                        filtter = "TrangThai='Chờ duyệt'";
                    }
        dt.DefaultView.RowFilter = filtter;
        GV.DataSource = dt;
        GV.DataBind();
    }
}